/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import modelo.DetalleFactura;

/**
 *
 * @author Felipe
 */
public class DetalleFacturaDAO {
    
    private Connection conexion;

    public Connection getConexion() {
        return conexion;
    }

    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

     public void Insertar(DetalleFactura deta) {
        PreparedStatement sentencia = null;

        try {
            String codProd = deta.getCodProducto();
            int corrFac = deta.getCorrFactura();
            int precioNeto = deta.getPrecio();
            int cantidad = deta.getCantidad();

            String sql = "insert into DETALLE_FACTURA (CORR_FACTURA,COD_PRODUCTO,CANTIDAD,PRECIO_COMPRA) values(?,?,?,?)";
            sentencia = conexion.prepareStatement(sql);

            sentencia.setInt(1, corrFac);
            sentencia.setString(2, codProd);
            sentencia.setInt(3, cantidad);
            sentencia.setInt(4, precioNeto);
            sentencia.executeUpdate();

//          sentencia.executeUpdate(sql);
        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("error al insertar detalle boleta", ex);
        } finally {
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }

        }
     }
     
        public Collection<DetalleFactura> buscarTodosPorCodFac(String codFac){
        Collection<DetalleFactura> lista = new ArrayList<DetalleFactura>();
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        try {
            String sql = "select d.CORR_FACTURA,d.COD_PRODUCTO,d.CANTIDAD,d.PRECIO_COMPRA, p.NOMBRE  from DETALLE_BOLETA join PRODUCTOS p using (COD_PRODUCTO) where COD_BOLETA = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setString(1, codFac);
            System.out.println(sql);
            resultado = sentencia.executeQuery();
            try {
                while (resultado.next()) {
                    DetalleFactura registro = new DetalleFactura();
                    registro.setCorrFactura(resultado.getInt("CORR_FACTURA"));
                    registro.setPrecio(resultado.getInt("PRECIO_COMPRA"));
                    registro.setCantidad(resultado.getInt("CANTIDAD"));
                    registro.setCodProducto(resultado.getString("COD_PRODUCTO"));
                    registro.setNombre(resultado.getString("NOMBRE"));
                    // finalmente, agregar a la coleccion
                    lista.add(registro);
                }
            } catch (NullPointerException ex) {
                return null;

            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("error al buscar detalles de facturas", ex);
        } finally {
            try {
                resultado.close();
            } catch (Exception noGestionar) {
            }
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }
        }
        return lista;
    }

    Collection<DetalleFactura> buscarTodosPorCorrFac(int codigo) {
        Collection<DetalleFactura> lista = new ArrayList<DetalleFactura>();
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        try {
            String sql = "select d.COD_PRODUCTO,d.CANTIDAD, d.PRECIO_COMPRA, p.NOMBRE  from DETALLE_FACTURA d join PRODUCTOS p using (COD_PRODUCTO) where CORR_FACTURA = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setInt(1, codigo);
            System.out.println(sql);
            resultado = sentencia.executeQuery();
            try {
                while (resultado.next()) {
                    DetalleFactura registro = new DetalleFactura();
                    registro.setCorrFactura(codigo);
                    registro.setPrecio(resultado.getInt("PRECIO_COMPRA"));
                    registro.setCantidad(resultado.getInt("CANTIDAD"));
                    registro.setCodProducto(resultado.getString("COD_PRODUCTO"));
                    registro.setNombre(resultado.getString("NOMBRE"));
                    
                    lista.add(registro);
                }
            } catch (NullPointerException ex) {
                return null;

            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("error al buscar detalles de facturas", ex);
        } finally {
            try {
                resultado.close();
            } catch (Exception noGestionar) {
            }
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }
        }
        return lista;
    }

}

